//
//  LREmoticonPackge.swift
//  表情键盘
//
//  Created by 雷路荣 on 15/12/28.
//  Copyright © 2015年 leilurong. All rights reserved.
//

import UIKit
/**
 *  表情包模型
 */
class LREmoticonPackge: NSObject {
    /// id表情包的文件夹名称
    var id: String
    /// 表情包的名称
    var group_name_cn: String?
    /// 所有的表情模型
    var emoticons: [LREmoticon] = [LREmoticon]()
    /// 表情包构造函数
    init(id: String) {
        self.id = id
        super.init()
    }
    /// 获取 Emoticons.bundle 的路径 直接查找
    //static let bundlePath = NSBundle.mainBundle().pathForResource("Emoticons.bundle", ofType: nil)
    static let bundlePath = NSBundle.mainBundle().pathForResource("Emoticons", ofType: "bundle")!
    /// 加载所有的表情包模型
    class func loadPackges() -> [LREmoticonPackge]? {
        // 1. 加载到emoticons.plist,可以知道有每个表情包的文件夹名称
        // 1.1 拼接emoticons.plist的路径 bundlePath/emoticons.plist
        let plistPath = (bundlePath as NSString).stringByAppendingPathComponent("emoticons.plist")
        
        // 1.2 读取emoticons.plist里面的每个表情包文件夹名称
        let emoticonDict = NSDictionary(contentsOfFile: plistPath)
        // 1.3 获取packages所对应的value是一个数组,数组里面存放的是字典
        if let array = emoticonDict!["packages"] as? [[String: AnyObject]] {
            // 定义数组保存表情包模型
            var packages = [LREmoticonPackge]()
            
            // 创建 最近 表情包
            let recentPackage = LREmoticonPackge(id: "")
            // 最近 表情包添加名称
            recentPackage.group_name_cn = "最近"
            // 添加到表情包数组最前面
            packages.append(recentPackage)
            // 最近 表情包 添加空白表情和删除按钮
            recentPackage.appendEmptyEmoticon()
            
            // 1.4 遍历数组里面的元素
            for dict in array {
                let id = dict["id"] as! String
                //print("dict = \(dict)")
                // 1.5 创建表情包
                let package = LREmoticonPackge(id: id)
                // 1.6 表情包加载表情
                package.loadEmoticon()
                // 1.7 添加到数组
                packages.append(package)
                //print("package = \(package)")
            }
            return packages
        }
        return nil
    }
    /// 加载所有的表情,加载表情包的名称
    func loadEmoticon() {
        // 2.1 info.plist全路径 = bundlePath + id + info.plist
        let infoPlistPath = ((LREmoticonPackge.bundlePath as NSString).stringByAppendingPathComponent(id) as NSString).stringByAppendingPathComponent("info.plist")
        print("infoPlistPath = \(infoPlistPath)")
        // 2.2 加载info.plist数据
        let infoDict = NSDictionary(contentsOfFile: infoPlistPath)
        // 2.3 获取表情包名称
        group_name_cn = infoDict!["group_name_cn"] as? String
        // 2.4 获取表情模型数组
        if let emoticonsArr = infoDict!["emoticons"] as? [[String: AnyObject]] {
            
            var index = 0
            // 2.5 遍历获取每一个表情对应的字典
            for dict in emoticonsArr {
                //print("loadEmoticon--dict = \(dict)")
                // 2.6 字典转模型,传入表情包文件夹名称id
                let emoticon = LREmoticon(id: id, dict: dict)
                // 2.7 将表情模型添加到表情模型数组里面
                emoticons.append(emoticon)
                
                index++
                // 2.8 如果是第21个表情就添加删除按钮
                if index == 20 {
                    // 每页的最后一个,添加一个删除模型
                    emoticons.append(LREmoticon(removeEmoticon: true))
                    // 清空index,下一页又从0开始算起
                    index = 0
                }
            }
        }
        // 在加载完所有表情之后判断最后一页是否满21个,不满就添加空白按钮和删除按钮
        appendEmptyEmoticon()
    }
    /// 当表情包最后一页不满21个时,需要添加空白按钮和一个删除按钮
    func appendEmptyEmoticon() {
        // 判断表情包最后一页是不是满21个
        let count = emoticons.count % 21
        // count == 0 表示正好满一页
        // count != 0 表示最后一页有count个表情
        // "最近"表情包里面没有表情  emoticons.count % 21 = 0,emoticons.count == 0
        // 一个表情都没有的表情包需要添加20个空的表情和一个删除按钮
        if count > 0 || emoticons.count == 0 {
            // 表示最后一页有count个表情
            // count == 1,需要添加19(20 - 1)(1..<20)个空白表情和一个删除按钮
            // count == 2,需要添加18(20 - 2)(2..<20)个空白表情和一个删除按钮
            // 添加空白按钮
            for _ in count..<20 {//count~~19 最多遍历20次，最多添加20个空格(最近里面开始是20个空格和一个删除)
                // 创建空白按钮,添加到现有表情模型的后面
                emoticons.append(LREmoticon(removeEmoticon: false))
            }
            //添加删除按钮
            emoticons.append(LREmoticon(removeEmoticon: true))
        }
    }
    
    // 对象的打印
    override var description: String {
        //        let p = ["id", "group_name_cn", "emoticons"]
        //        return "\n\t表情包模型: \(dictionaryWithValuesForKeys(p))"
        return "\n\t表情包模型: id:\(id), group_name_cn: \(group_name_cn), emoticons: \(emoticons))"
    }

}
